Dados Faltantes e Remoção de Outliers

Exemplos no R

Wlademir Prates

Nestes slides

  • Dados Faltantes
  • Outliers

Pacotes utilizados

library(dplyr)

Tratamento dos Dados Faltantes

  • Remoção
  • Imputação por média
  • Imputação por regressão

Remoção

  • Linhas: Excluir linhas com dados faltantes pode ser uma opção quando a perda de informações é mínima ou os dados ausentes são aleatórios e não introduzem viés.
  • Colunas: Remover colunas inteiras é útil quando uma grande proporção de dados está ausente ou a coluna não é relevante para a análise.

Exemplos de remoções

Linhas com dados faltantes no dataset ‘airquality’

airquality |> na.omit()

Coluna específica (supondo que ‘Solar.R’ tenha muitos dados faltantes)

airquality |> select(-Solar.R)

Imputação

  • Média: Substituição de dados faltantes pela média da variável. Simples, mas eficaz para manter a média geral.
  • Regressão: Uso de modelos estatísticos para prever e substituir os dados faltantes. Mais complexo, mas pode refletir melhor as relações entre variáveis.

Exemplo de Imputação pela Média

# Imputação dos dados faltantes com a média
airquality_imputed <- airquality |>
  mutate(across(where(is.numeric), ~ ifelse(is.na(.), mean(., na.rm = TRUE), .)))

Antes

summary(airquality$Ozone)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   1.00   18.00   31.50   42.13   63.25  168.00      37 

Depois

# Verificando o resultado da imputação
summary(airquality_imputed$Ozone)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00   21.00   42.13   42.13   46.00  168.00 

Exemplo de Imputação por Regressão

# Removendo observações onde 'Ozone' é NA
airquality_filtered <- airquality |> filter(!is.na(Ozone))

# Criando um modelo de regressão usando 'Wind' como preditor para 'Ozone'
model <- lm(Ozone ~ Wind + Temp, data = airquality_filtered, na.action = na.exclude)
model

Call:
lm(formula = Ozone ~ Wind + Temp, data = airquality_filtered, 
    na.action = na.exclude)

Coefficients:
(Intercept)         Wind         Temp  
    -71.033       -3.055        1.840  
# Criando um dataset para as previsões onde 'Ozone' é NA
missing_ozone <- airquality |> filter(is.na(Ozone)) |> select(Wind, Temp)

# Usando o modelo para prever 'Ozone' com base em 'Wind'
predicted_ozone <- predict(model, newdata = missing_ozone)
head(predicted_ozone, 5)
         1          2          3          4          5 
-11.676727  29.661896 -16.864178  -9.829664   9.413045 
# Substituindo os valores NA em 'Ozone' pelas previsões
airquality_imputed <- airquality
airquality_imputed$Ozone[is.na(airquality$Ozone)] <- predicted_ozone

Resultado Imputação por Regressão

Antes

summary(airquality$Ozone)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   1.00   18.00   31.50   42.13   63.25  168.00      37 

Depois

# Verificando o resultado da imputação
summary(airquality_imputed$Ozone)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -16.86   20.00   35.50   41.86   59.00  168.00 

Tratamento de Outliers

Por que remover outliers

Outliers são observações que se desviam significativamente dos outros dados. Eles podem ser resultado de variabilidade no processo de medição ou indicar um erro experimental. A remoção de outliers é importante quando esses valores podem distorcer análises estatísticas e modelos preditivos.

Identificação e Remoção de Outliers

A identificação de outliers pode ser feita através de métodos estatísticos, como a aplicação de regras baseadas em intervalos interquartis (IQR). Após a identificação, os outliers podem ser removidos para melhorar a qualidade dos dados.

Remoção de Outliers com IQR

O que é IQR: O Intervalo Interquartil (IQR) é a diferença entre o terceiro quartil (Q3) e o primeiro quartil (Q1) dos dados. Representa a faixa média na qual a maioria dos dados se encontra.

Regra do IQR para Outliers:

  • Limite Inferior: Q1 - 1.5 * IQR. Valores abaixo deste limite são considerados outliers inferiores.
  • Limite Superior: Q3 + 1.5 * IQR. Valores acima deste limite são considerados outliers superiores.

Por que usar IQR: O IQR é robusto a outliers e fornece um método confiável para identificá-los. É menos afetado por valores extremos do que métodos baseados em média ou desvio padrão.

Exemplo de remoção de outliers por IQR

# Calculando o IQR para 'Ozone'
ozone_IQR <- IQR(airquality$Ozone, na.rm = TRUE)
ozone_IQR
[1] 45.25
ozone_quartiles <- quantile(airquality$Ozone, c(0.25, 0.75), na.rm = TRUE)
ozone_quartiles
  25%   75% 
18.00 63.25 
# Definindo limites para outliers
lower_bound <- ozone_quartiles[1] - 1.5 * ozone_IQR
lower_bound
    25% 
-49.875 
upper_bound <- ozone_quartiles[2] + 1.5 * ozone_IQR
upper_bound
    75% 
131.125 
# Filtrando outliers
airquality_no_outliers <- airquality |>
  dplyr::filter(Ozone > lower_bound & Ozone < upper_bound)

Outliers - Conclusão

  • A remoção de outliers deve ser considerada cuidadosamente, pois pode alterar a estrutura dos dados.

  • É essencial analisar se os outliers são erros genuínos ou se representam variações importantes a serem estudadas.

  • Em muitos casos, a remoção de outliers pode levar a análises mais precisas e a modelos mais robustos.